چگونه یک ساعت آنالوگ را در فرم اکسس نمایش دهیم ؟
سلام به یکی دیگه از اموزش های سافت پلاس خوش اومدید . امروز می خواهیم با هم در مورد این صحبت کنیم که چه جوری می تونیم یک ساعت آنالوگ در فرم اکسس نمایش دهیم.
با فرم ها در اکسس که آشنایی دارید خوب می دونید که یک فرم معمولا شامل اشیای مختلفی است . دکمه ها ، تکس باکس ها ، لیست باکس ها ، برچسب ها و خیلی از اشیای دیگه .
خیلی از این اشیا رو به راحتی یک یا دو کلیک می تونید بر روی فرم های خود قرار دهید . مطمئنم که شما برای قرار دادن یک دکمه بر روی فرم خود مشکلی ندارید یا برای قرار دادن یک تکس باکس هم همینطور .
چون از قبل همه این اشیایی که از اونها اسم بردیم توسط اکسس آماده شده و برای استفاده من و شما در دسترس ما قرار دارند . تنها کاری که ما باید بکنیم انتخاب کردن نوع شی مورد نظر و قرار دادن اون بر روی فرم است .
اما اگر از شما بخواهم که کاری کنید که فرم شما امکان نمایش زمان رو برای کاربر فراهم بکنه چی کار می کنید ؟ بگذارید ساده تر بگویم اگر از شما بخواهم که یک ساعت را بر روی فرم خود قرار دهید چه کار می کنید ؟ .
آیا مثل یک تکس باکس یا لیست باکس به سراغ آیتمی به نام ساعت می روید و اون رو بر روی فرم خود قرار می دهید و همه چیز تمام می شود ؟ ای کاش اینطوری بود . یعنی ای کاش ما یک شئی داشتیم به اسم ساعت و اینجوری همه چیز ساده و راحت می شد .
اما خبر بد اینه که همچین شئی در اکسس وجود نداره . پس ما نمی تونیم ساعت مورد نظرمون رو بطور زنده بر روی فرم خودمون نمایش بدیم ؟.
خوب خبر خوب اینه که چرا . خیلی راحت و با طی کردن چند تا مرحله ساده شما قادر خواهید بود که زمان رو بطور دقیق و زنده برای کاربرتون و بر روی فرم مورد نظرتون نمایش بدید .
اما چه جوری ؟ این چه جوری بودن هموم چیزیه که می خواهیم توی آموزش امروزمون مفصل راجع به اون با هم صحبت کنیم .
من علیرضا شهرآئینی هستم . مدیر وبسایت سافت پلاس . اگر تا انتهای این مطلب من رو همراهی کنید با هم یاد می گیریم که :
-چه جوری یک ساعت رو بر روی فرم خودمون چاپ کنیم .
– چه جوری یک ساعت رو بصورت دیجیتال بر روی فرممون نمایش بدیم .
– چه جوری یک ساعت رو بصورت آنالوگ بر روی فرم خودمون نمایش بدیم .
و در انتها این شما هستید که وقتی این مطلب رو مطالعه کردید به سادگی و بنا به سلیقه خودتون انتخاب کنید که از کدوم یک از این سه حالت استفاده کنید .
پس با من همراه شوید .
نحوه چاپ و نمایش ساعت و زمان بر روی یک فرم در اکسس
اول از ساده ترین حالت ممکن شروع می کنیم .
در این حالت می توانیم کاری کنیم که اکسس بطور خودکار آخرین اطلاعات مربوط به زمان و یا تاریخ را از ویندوز دریافت کرده و آن را بر روی فرم خود به کاربر نمایش دهیم .
اما چه جوری می شود این کار رو کرد ؟
خب اکسس برای این کار یک سری از توابع را از قبل آماده کرده است که به راحتی می توانید آنها را فراخوانی کرده و در فرم های خود از آنها استفاده کنید .
مثلا به قطعه کد زیر نگاه کنید .
. ()date = .
اگر این تابع را در داخل یک تکس باکس قرار دهید چیزی که به شما نمایش می دهد یک تاریخ است . این تاریخ مربوط به تاریخ جاری سیستمی است که برنامه شما در حال اجرا بر روی آن است .
یا اینکه به کد زیر نگاه کنید .
. ()now= .
این کد همان چیزی است که ما به آن احتیاج داریم . استفاده از این کد و قرار دادن آن در داخل یک تکس باکس باعث می شود که برنامه ساعت مربوط به سیستم را خوانده و آن را بر روی فرم ما نمایش دهد .
خب پس اینجا ما توانستیم ساعت حال حاضر را از روی سیستم خود خوانده و آن را در قالب یک تکس باکس بر روی فرم خود نمایش دهیم .اما این کار یک ایراد دارد .
ایراد آن هم این است که این ساعت ، ثابت است و با پیشرفت ثانیه ها و دقیقه ها هیچ تغییری در ساختار آن ایجاد نمی شود .
هر چند که نمایش ساعت در این فرمت هم می تواند خیلی از جاها برای ما کارآمد و کارساز باشد اما این چیزی نیست که بخواهیم به آن اکتفا کنیم .
ما می خواهیم کاری کنیم که برنامه ساعت مربوط به سیستم را بطور زنده بر روی فرم ما نمایش دهد .
خوب برای این کار ما دو تا راهکار داریم و یا بهتر است بگویم که برای نمایش زنده ساعت بر روی فرم خود می توانیم از دو حالت استفاده کنیم .
حالت اول این است که یک ساعت را در فرمت دیجیتال بر روی فرم خود قرار دهیم . حالت دوم این است که بیاییم همین ساعت را در قالب یک ساعت آنالوگ به نمایش بگذاریم
منظور من از ساعت آنالوگ ساعتی است که دارای عقربه شمار برای ساعت دقیقه و ثانیه باشد .
حالا برویم ببینیم که چطور می توانیم هر کدام از این ساعت ها را ایجاد کنیم .
نمایش ساعت زنده بر روی فرم اکسس بصورت دیجیتال
وقتی که صحبت از ساعت دیجیتال بر روی فرم می کنیم منظورمان ساعتی است که در آن عقربه های شمارشگر بصورت دیجیتالی هستند .
اما چه جوری می شود همچین ساعتی را بر روی فرم خود قرار دهیم . ؟
خب این موضوع مطلب جداگانه ای است که اتفاقا قبلا در این سایت راجع به آن یک آموزش مجزایی را قرار داده ام . برای اینکه بدانید چطور می شود یک ساعت دیجیتال را بر روی فرم خود قرار دهید کافی است بر روی لینک زیر کلیک کنید .
مطلب مرتبط : قرار دادن ساعت دیجیتال بر روی فرم اکسس .
در این مطلب بطور مفصل در مورد مراحلی که با طی کردن آنها می توانید این ساعت دیجیتال را ایجاد و آن را بر روی فرم خود قرار دهید صحبت کرده ام .
پس این شد در خصوص ساعت دیجیتال که با مراجعه به مطلب بالا به راحتی می توانید یک ساعت از نوع دیجیتال را برای خود ایجاد کنید .
اما برای قرار دادن ساعت از نوع آنالوگ چه کاری را باید انجام دهیم ؟
مراحل قرار دادن ساعت آنالوگ در فرم اکسس
برای قرار دادن یک ساعت در فرمت آنالوگ بر روی فرم خود باید یک سری از کار ها را با هم انجام دهیم . این کارها برخی در داخل اکسس و برخی در محیط کد نویسی وی بی ای باید انجام شود .
البته نگران این موضوع نباشید که قرار است یک سری از کارهای سخت و پیچیده را انجام دهیم . با من گام به گام پیش بیایید تا به راحتی همه این کارها را با هم انجام دهیم .
مرحله اول : ایجاد یک فرم برای نمایش ساعت بر روی آن
قبل از هر چیز باید یک فرم داشته باشیم تا ساعت خود را بر روی آن قرار دهیم . ایجاد این فرم را به عهده خودتان می گذارم . بعد از اینکه یک فرم خالی را ایجاد کردید با من همراه شوید تا مرحله بعد را انجام دهیم .
مرحله دوم : قرار دادن عقربه ثانیه شمار بر روی فرم
همه چیز از این مرحله شروع می شود برای این مرحله می خواهیم یک عقربه را بر روی فرم خود قرار دهیم . این عقربه کار شمارش ثانیه ها را برای ما انجام می دهد .
اما چه جوری می شود این عقربه را به فرم خود اضافه کرد ؟
این کار خیلی ساده است . اول فرم خود را در حالت طراحی قرار دهید . سپس به سربرگ Design رفته از داشبورد Controls گزینه Line را انتخاب کنید .
حالا به محیط فرم خود رفته و یک خط را با استفاده از این ابزار بر روی فرم خود رسم کنید .
حالا باید یک سری از تنظیمات مربوط به این خط را با استفاده از کادر Property انجام دهیم .
این تنظیمات چه هستند ؟
برای تنظیم اول به سربرگ All رفته گزینه مربوط به Name را برای این خط بصورت Lins نام گذاری کنید .
حالا در همین سربرگ به سراغ گزینه Border width رفته مقدار آن را برابر با ۲ pt قرار دهید .
خاصیت رنگ آن را نیز برابر با رنگ قرمز قرار دهید . تصویر زیر این تنظیمات را به شما نمایش می دهد .
البته در این بین یک سری از تنظیمات دیگر را باید انجام دهید که تمامی آنها را می توانید در تصویر بالا مشاهده کنید .
حالا باید به سراغ عقربه مربوط به دقیقه شمار برویم . برای این کار هم مثل خط مربوط به ساعت شمار یک خط را به فرم خود اضافه کنید و مقادیر مربوط به ویژگی های آن را مثل تصویر زیر تنظیم کنید .
مهمترین تنظیمی که در مورد این خط باید انجام دهید نام ان است که باید بصورت Linh نام گذاری شود
حالا می رسیم به عقربه مربوط به ساعت شمار .بعد از قرار دادن خط مورد نظر بر روی فرم خود تنظیمات مربوط به این خط را نیز مثل تصویر زیر تنظیم کنید. مهمترین تنظیمی که در مورد این خط باید انجام دهید نام ان است که باید بصورت Linh نام گذاری شود
.
تا به اینجای کار ما سه عقربه داریم که قرار است کار شمارش ثانیه ها ، دقیقه ها و ساعت را برای ما انجام دهند .تصویر زیر نتیجه و خروجی کار را تا به اینجا برای ما نمایش می دهد .
در قدم بعدی باید یک تصویر را به مجموعه موجود اضافه کنیم . این تصویر قرار است بدنه ساعت ما را تشکیل دهد . با یک جستجوی ساده در اینترنت می توانید به دنبال ساعتی بگردید که فاقد عقربه باشد .
البته من یک نمونه از این ساعت را آماده کرده ام که در قالب نمونه فایل دانلودی می توانید از در پایان همین مطلب دانلود کنید .
در هر حال وقتی که این تصویر را فراهم کردید باید آن را به نحوی قرار دهید که دقیقا عقربه های شما در مرکز آن واقع شوند .
یعنی چیزی مثل تصویر زیر .
تا به اینجای کار هر چه که انجام دادیم یک جورهایی مربوط به بخش سخت افزار کار ما می شد و توانستیم بدنه ساعت خود را ایجاد کنیم . حالا باید به سراغ بخش نرم افزار کار و کد نویسی برویم .
کدهای وی بی ای برای تنظیمات ساعت عقربه ای
اول کدهایی را که احتیاج داریم را برای شما درج می کنم . این کدها کمک می کند که عقربه های ساعت ما شروع به کار کرده و زمانی را که بر روی سیستم شما وجود دارد را در قالب عقربه ها نمایش دهد .
Option Compare Binary
Option Explicit
Const PI As Double = 3.14159265358979
Const conTwips As Long = 567
Dim arrCP(0 To 60, 0 To 13)
Dim intS As Integer
Dim intM As Integer
Dim intH As Integer
Dim dteTimeDiff As Date
Sub sAnalogeClockArrays()
Dim intCP As Integer
Dim dblLeft As Double
Dim dblTop As Double
Dim dblLenS As Double
Dim dblLenM As Double
Dim dblLenH As Double
dblLeft = 1
dblTop = 1
dblLenS = 1
dblLenM = 0.9 * dblLenS
dblLenH = 0.65 * dblLenS
For intCP = 0 To 15
arrCP(intCP, 0) = intCP
arrCP(intCP, 1) = (dblLeft * conTwips * dblLenS) + (conTwips * dblLeft)
arrCP(intCP, 2) = (Round(1 - Cos((PI / 180) * (intCP * 6)), 3) * conTwips * dblLenS) + (conTwips * dblTop)
arrCP(intCP, 3) = Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS)
arrCP(intCP, 4) = Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS)
arrCP(intCP, 5) = (dblLeft * conTwips * dblLenS) + (conTwips * dblLeft)
arrCP(intCP, 6) = (Round(1 - Cos((PI / 180) * (intCP * 6)), 3) * conTwips * dblLenM) + (conTwips * _
(dblTop + dblLenS - dblLenM))
arrCP(intCP, 7) = Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM)
arrCP(intCP, 8) = Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM)
arrCP(intCP, 9) = (dblLeft * conTwips * dblLenS) + (conTwips * dblLeft)
arrCP(intCP, 10) = (Round(1 - Cos((PI / 180) * (intCP * 6)), 3) * conTwips * dblLenH) + (conTwips *_
(dblTop + dblLenS - dblLenH))
arrCP(intCP, 11) = Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH)
arrCP(intCP, 12) = Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH)
arrCP(intCP, 13) = True
Next
For intCP = 16 To 30
arrCP(intCP, 0) = intCP
arrCP(intCP, 1) = (dblLeft * conTwips * dblLenS) + (conTwips * dblLeft)
arrCP(intCP, 2) = (dblTop * conTwips * dblLenS) + (conTwips * dblTop)
arrCP(intCP, 3) = Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS)
arrCP(intCP, 4) = -Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS)
arrCP(intCP, 5) = (dblLeft * conTwips * dblLenS) + (conTwips * dblLeft)
arrCP(intCP, 6) = (dblTop * conTwips * dblLenS) + (conTwips * dblTop)
arrCP(intCP, 7) = Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM)
arrCP(intCP, 8) = -Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM)
arrCP(intCP, 9) = (dblLeft * conTwips * dblLenS) + (conTwips * dblLeft)
arrCP(intCP, 10) = (dblTop * conTwips * dblLenS) + (conTwips * dblTop)
arrCP(intCP, 11) = Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH)
arrCP(intCP, 12) = -Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH)
arrCP(intCP, 13) = False
Next
For intCP = 31 To 45
arrCP(intCP, 0) = intCP
arrCP(intCP, 1) = (1 + Round(Sin((PI / 180) * (intCP * 6)), 3)) * (conTwips * dblLenS) + (conTwips * dblLeft)
arrCP(intCP, 2) = (dblTop * conTwips * dblLenS) + (conTwips * dblTop)
arrCP(intCP, 3) = -Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS)
arrCP(intCP, 4) = -Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS)
arrCP(intCP, 5) = (1 + Round(Sin((PI / 180) * (intCP * 6)), 3)) * (conTwips * dblLenM) + (conTwips *_
(dblLeft + dblLenS - dblLenM))
arrCP(intCP, 6) = (dblTop * conTwips * dblLenS) + (conTwips * dblTop)
arrCP(intCP, 7) = -Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM)
arrCP(intCP, 8) = -Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM)
arrCP(intCP, 9) = (1 + Round(Sin((PI / 180) * (intCP * 6)), 3)) * (conTwips * dblLenH) + (conTwips * _
(dblLeft + dblLenS - dblLenH))
arrCP(intCP, 10) = (dblTop * conTwips * dblLenS) + (conTwips * dblTop)
arrCP(intCP, 11) = -Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH)
arrCP(intCP, 12) = -Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH)
arrCP(intCP, 13) = True
Next
For intCP = 46 To 60
arrCP(intCP, 0) = intCP
arrCP(intCP, 1) = (Round(Sin((PI / 180) * (intCP * 6)), 3) + 1) * conTwips * (dblLenS) + (conTwips * dblLeft)
arrCP(intCP, 2) = (1 - Round(Cos((PI / 180) * (intCP * 6)), 3)) * (conTwips * dblLenS) + (conTwips * dblTop)
arrCP(intCP, 3) = -Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS)
arrCP(intCP, 4) = Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS)
arrCP(intCP, 5) = (Round(Sin((PI / 180) * (intCP * 6)), 3) + 1) * (conTwips * dblLenM) + (conTwips * (dblLeft + dblLenS - dblLenM))
arrCP(intCP, 6) = (1 - Round(Cos((PI / 180) * (intCP * 6)), 3)) * (conTwips * dblLenM) + (conTwips * (dblTop + dblLenS - dblLenM))
arrCP(intCP, 7) = -Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM)
arrCP(intCP, 8) = Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM)
arrCP(intCP, 9) = (Round(Sin((PI / 180) * (intCP * 6)), 3) + 1) * (conTwips * dblLenH) + (conTwips * (dblLeft + dblLenS - dblLenH))
arrCP(intCP, 10) = (1 - Round(Cos((PI / 180) * (intCP * 6)), 3)) * (conTwips * dblLenH) + (conTwips * (dblTop + dblLenS - dblLenH))
arrCP(intCP, 11) = -Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH)
arrCP(intCP, 12) = Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH)
arrCP(intCP, 13) = False
Next
End Sub
Private Sub Form_Open(Cancel As Integer)
If IsNull(Me.OpenArgs) Then
dteTimeDiff = #12:00:00 AM#
Else
dteTimeDiff = Me.OpenArgs
End If
Call sAnalogeClockArrays
End Sub
Private Sub Form_Timer()
intS = CInt(Second(Time()))
intM = CInt(Minute(Time()))
intH = CInt(Hour(Time()))
Select Case intH
Case Is >= 12
intH = intH - 12
Case Else
intH = intH
End Select
DoEvents
Me.Lins.Left = LinearSearch(arrCP, 0, 1, intS)
Me.Lins.Top = LinearSearch(arrCP, 0, 2, intS)
Me.Lins.Width = LinearSearch(arrCP, 0, 3, intS)
Me.Lins.Height = LinearSearch(arrCP, 0, 4, intS)
Me.Lins.LineSlant = LinearSearch(arrCP, 0, 13, intS)
Me.Linm.Left = LinearSearch(arrCP, 0, 5, intM)
Me.Linm.Top = LinearSearch(arrCP, 0, 6, intM)
Me.Linm.Width = LinearSearch(arrCP, 0, 7, intM)
Me.Linm.Height = LinearSearch(arrCP, 0, 8, intM)
Me.Linm.LineSlant = LinearSearch(arrCP, 0, 13, intM)
Me.Linh.Left = LinearSearch(arrCP, 0, 9, CInt(intH * 5 + (intM / 60) * 5))
Me.Linh.Top = LinearSearch(arrCP, 0, 10, CInt(intH * 5 + (intM / 60) * 5))
Me.Linh.Width = LinearSearch(arrCP, 0, 11, CInt(intH * 5 + (intM / 60) * 5))
Me.Linh.Height = LinearSearch(arrCP, 0, 12, CInt(intH * 5 + (intM / 60) * 5))
Me.Linh.LineSlant = LinearSearch(arrCP, 0, 13, CInt(intH * 5 + (intM / 60) * 5))
Me.Repaint
End Sub
Function LinearSearch(varItems, intCol, intColReturn, varSought)
Dim intPos
Dim fFound
fFound = False
For intPos = LBound(varItems) To UBound(varItems)
If varSought = varItems(intPos, intCol) Then
fFound = True
Exit For
End If
Next
If fFound Then
LinearSearch = varItems(intPos, intColReturn)
Else
LinearSearch = -1
End If
End Function
همانطور که می بینید این کدها بسیار طولانی و تا حدی پیچیده هستند . اما نگران نباشید شما نیازی به این ندارید که بخواهید این کدها را تفسیر کنید .
فقط کافی است از این کدها در جای مناسب استفاده کنید . برای این کار باید آنها را در جای مناسب از محیط کد نویسی خود قرار دهید .
این کار هم اصلا پیچیده نیست . اول از این کدها یک کپی گرفته و به محیط اکسس خود بروید .
کلیدهای ترکیبی ALT+F11 را فشار دهید تا به محیط کد نویسی وی بی ای وارد شوید .
در این محیط از منوی Insert گزینه Module را انتخاب کنید .
حالا همه این کدها را بصورت یک جا در این محیط paste کنید .
بعد از انجام این مراحل به محیط اکسس برگردید و فرم خود را اجرا کنید . اگر همه چیز را به خوبی پیش برده باشید مشاهده خواهید کرد که عقربه های ساعت شما شروع به کار کرده و ساعت سیستم را برای شما نمایش می دهند .
پس در اینجا موفق شدیم که ساعتی را در قالب یک ساعت آنالوگ طراحی کرده و آن را بر روی فرم خود قرار دهیم .
امیدوارم که این آموزش هم برای شما مفید و کاربردی بوده باشد .
خوشحال می شوم نظر خود را در مورد این آموزش در قسمت نظرات درج کنید .
در ضمن از شما دعوت می کنم که حتما سری هم به پیچ من در اینستاگرام بزنید . در آنجا با کلی مطالب آموزشی در زمینه های مختلف منتظر شما هستم .
مطالب زیر را حتما مطالعه کنید
مفهوم join در SQL و دیتابیس اکسس +ویدئو
ساخت برچسب در اکسس💥چطور آنها را ایجاد و مدیریت کنیم ؟
ریبون ها در اکسس💥از مخفی کردن تا مدیریت کردن آنها
چطوری متن ها و تصاویر را بصورت متحرک در اکسس نمایش بدهیم ؟
فرمت دهی نوشته ها در اکسس | کاربرد + مثالها
۵ ویژگی در فرم های اکسس که کمتر از آنها خبر داشتید .
4 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام وقت بخیر و شادی و تندرستی
ممنون از مطالبا مفید و کاربردی
/نامن /تاج آباد/فیض آباد / شهرآئین
سلام و درود به نامن /تاج آباد /فیض آباد / شهرآئین/جسین آباد/مقیسه
سلام نمونه فایل جهت دانلود اشتباهی بارگذاری شده اصلا ساعت انالوگ درش نیست؟یه تایمر برای دیدن تکست باکس گذاشتید
با سلام
ممنون از دقت نظر شما به زودی اصلاح خواهد شد